<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Promise</title>
</head>
<body>
  <script>
    /**
     * Promise
     * 1. 作用：用来消除 异步 回调地狱的 问题
     *  
     * 2. 使用：
     *  1. 创建Promise实例，用这个实例去包裹异步代码
     *    const p = new Promise((resolve, reject) => {
     *      编写异步代码
     *    })
     * 
     *  2. 使用Promise实例给我们提供的then方法拿数据和catch方法获取错误
     *  p.then(data => {
     *    成功
     *  }).catch(e => {
     *   失败
     * })
     *  
     */
    /*
      需求：
        1秒之后，打印1，
        1打印出来之后，2秒之后，打印2，
        2打印出来之后，3秒之后，打印3
    */


    // 1. 封装延迟打印的函数
    let print = (data, delayTime) => {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(data)
        }, delayTime * 1000)
      })
    }
    // 2. 调用函数 - 获取数据
    // Promise的链式调用
    print(1, 1)
    .then(data1 => {
      console.log(data1)
      return print(2, 2)
    })
    .then(data2 => {
      console.log(data2)
      return print(3, 3)
    })
    .then(data3 => {
      console.log(data3)
    })

    
  </script>
</body>
</html>